// stats.js - http://github.com/mrdoob/stats.js
(function (f, e) {
  'object' === typeof exports && 'undefined' !== typeof module
    ? (module.exports = e())
    : 'function' === typeof define && define.amd
    ? define(e)
    : (f.Stats = e());
})(this, function () {
  var f = function () {
    function e(a) {
      c.appendChild(a.dom);
      return a;
    }
    function u(a) {
      for (var d = 0; d < c.children.length; d++) c.children[d].style.display = d === a ? 'block' : 'none';
      l = a;
    }
    var l = 0,
      c = document.createElement('div');
    c.style.cssText = 'position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000';
    c.addEventListener(
      'click',
      function (a) {
        a.preventDefault();
        u(++l % c.children.length);
      },
      !1
    );
    var k = (performance || Date).now(),
      g = k,
      a = 0,
      r = e(new f.Panel('FPS', '#0ff', '#002')),
      h = e(new f.Panel('MS', '#0f0', '#020'));
    if (self.performance && self.performance.memory) var t = e(new f.Panel('MB', '#f08', '#201'));
    u(0);
    return {
      REVISION: 16,
      dom: c,
      addPanel: e,
      showPanel: u,
      begin: function () {
        k = (performance || Date).now();
      },
      end: function () {
        a++;
        var c = (performance || Date).now();
        h.update(c - k, 200);
        if (c >= g + 1e3 && (r.update((1e3 * a) / (c - g), 100), (g = c), (a = 0), t)) {
          var d = performance.memory;
          t.update(d.usedJSHeapSize / 1048576, d.jsHeapSizeLimit / 1048576);
        }
        return c;
      },
      update: function () {
        k = this.end();
      },
      domElement: c,
      setMode: u
    };
  };
  f.Panel = function (e, f, l) {
    var c = Infinity,
      k = 0,
      g = Math.round,
      a = g(window.devicePixelRatio || 1),
      r = 80 * a,
      h = 48 * a,
      t = 3 * a,
      v = 2 * a,
      d = 3 * a,
      m = 15 * a,
      n = 74 * a,
      p = 30 * a,
      q = document.createElement('canvas');
    q.width = r;
    q.height = h;
    q.style.cssText = 'width:80px;height:48px';
    var b = q.getContext('2d');
    b.font = 'bold ' + 9 * a + 'px Helvetica,Arial,sans-serif';
    b.textBaseline = 'top';
    b.fillStyle = l;
    b.fillRect(0, 0, r, h);
    b.fillStyle = f;
    b.fillText(e, t, v);
    b.fillRect(d, m, n, p);
    b.fillStyle = l;
    b.globalAlpha = 0.9;
    b.fillRect(d, m, n, p);
    return {
      dom: q,
      update: function (h, w) {
        c = Math.min(c, h);
        k = Math.max(k, h);
        b.fillStyle = l;
        b.globalAlpha = 1;
        b.fillRect(0, 0, r, m);
        b.fillStyle = f;
        b.fillText(g(h) + ' ' + e + ' (' + g(c) + '-' + g(k) + ')', t, v);
        b.drawImage(q, d + a, m, n - a, p, d, m, n - a, p);
        b.fillRect(d + n - a, m, a, p);
        b.fillStyle = l;
        b.globalAlpha = 0.9;
        b.fillRect(d + n - a, m, a, g((1 - h / w) * p));
      }
    };
  };
  return f;
});
